// var uid = 0
// export default class Dep{
//     constructor(){
//         // 用数组存储自己的订阅者，subs是subscribes订阅者的意思
//         // 这个数组里面放的是watcher的实例
//         this.id = uid++
//         this.subs = []
//     }

//     // 添加订阅
//     addSub(sub){
//         this.subs.push(sub)
//     }

//     // 添加依赖
//     depend(){
//         // Dep.target就是我们自己指定的一个全局的位置，你用window.target
//         //也行，只要是全局唯一，没有歧义就行
//         if(Dep.target){
//             this.addSub(Dep.target)
//         }
//         // 这个地方vue是把target存到了window上
//     }

//     //通知更新
//     notify(){
        
//         const subs = this.subs.slice()
//         for (let i = 0; i < subs.length; i++) {
//             subs[i].update()
//         }
//     }
// }



let id = 0
export default class Dep {
    constructor(){
        this.subs = []
        this.id = id++
    }
    // 收集watcher
    depend(){
        Dep.target.addDep(this)
    }
    addSub(watcher){
        this.subs.push(watcher)
    }
    // 更新
    notify(){
        this.subs.forEach(watcher=>{
            watcher.updata()
        })
    }
}

// 添加watcher
Dep.target = null
// 处理多个watcher
let stack = []
export function pushTarget(watcher) {
    Dep.target = watcher
    // 入栈
    stack.push(watcher)
}

export function removeTarget() {
    // Dep.target = null
    // 解析完成一个watcher就删除 一个watcher
    stack.pop()
    Dep.target = stack[stack.length-1] // 获取到前面的一个watcher
}

